#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "our_grep.h"

int main(int argc,char **argv)
{
  int res;
  
  if(argc < 3)
    {
      if(argv[1] == "--help")
	{
	printf("-s, --no-messages supprimer les messages d'erreur\n");
	printf("-H, --with-filename print the file name for each match\n");
	printf("-i, --ignore-case ignorer la distinction de la casse\n");
	printf("-f, --file=FICHIER charger le MOTIF depuis ce FICHIER\n");
	printf("-c, --count affiche seulement le compte des lignes concordantes par fichier\n");
	return 1;
	}
      else
	{
	  //printf("Bordel, pourquoi ça ne marche pas?!\n");
	  printf("Nombre paramètres insuffisant\n");
	  return 1;
	}
    }
  if(argc >= 3)
    {
      res = verifoption(argv[1]);
      if(res == 1)
	grep_whith_option(argv[1],argv[2],argv[3]);
      if(res == 2)
	printf("help\n");
      if(res == 0)
	grep_whithout_option(argv[1],argv[2]);
    }
  return 0;
}

int verifoption(char *str)
{
  int i;
  
  i = 0;
  if(str[i] == '-' && str[i+1] == 'i')
    return 1;
  if(str[i] == '-' && str[i+1] == 'b')
    return 2;
  else
    return 0;
}

void grep_whith_option(char *option, char *str, char *file)
{
  int res;
  FILE *fic;
  char ligne[512];
  int i;
  int no_mes= no_message(option);//Appel de la fonction pas de message d'erreur
  int aff_nom_fic = affiche_nom_fichier(option);
  int nb_lig = compte_nombre_ligne(option);
  
  fic = fopen(file, "r");
  
  if(fic == NULL)
    {
		if (no_mes=0)//Option d'affichage activée 
		{
		  printf("bad file %s\n", file);//Affichage message d'erreur
		  exit(1);
		}
	}
  i = 0;
  
  while(fgets(ligne, 512,fic) != NULL)
    {
	
      if(strstr(ligne,str))//Recherche de la chaine
	  {
			printf("%s ",ligne);
		if (aff_nom_fic = 1)
			printf("%s", file);
		if 	(nb_lig !=0) 

	nb_lig = compte_nombre_ligne(option);	

	printf(" %u ", nb_lig);
			printf("\n");
			//exit(1);
      }
	  i++;
	  nb_lig =i+1;
    }
}

int no_message(char opt)
{
  int i;
  int no_mes;
  
  i = 0;
  no_mes=0;
  
  if((opt == "-s")||(opt == "--no-messages"))//Vérifie nom de l'option
	{
    no_mes = 1;//Mets la verif de pas de message 
	}
  else
	{
	no_mes	= 0;
	}
	return (no_mes);
}

int ignore_casse(char *option, char *str)
{
	int i;
	int Casse_ignore;
	
	Casse_ignore = 0;
	i= 0 ;
	
	if(str[i] == "-i"||str[i] == "--ignore-case")//Vérifie nom de l'option
	{
		str[i] = toupper(str[i]);//Mets en majuscule la chaine
		Casse_ignore = 1;
		return 0;
		}
	 else
	{	 
		return 1;
	}
}

int affiche_nom_fichier(char *option, char *str)
{
	int aff_nom_fic;
	int i;
	
	aff_nom_fic = 0;
	i= 0 ;
	
	if(str[i] == "-H"||str[i] == "--with-filename")//Vérifie nom de l'option
	{
		aff_nom_fic  = 1;//Mets l'ajout du nom de fichier
		return 0;
	}
	else
	{
	return 1;
	}
}

int compte_nombre_ligne(char *option, char *str)
{
	int i;
	FILE *fic;
	char ligne[512];
	int nb_ligne;
	int vnb_lig;

	i= 0 ;
	nb_ligne = 0;
	vnb_lig=0;
	
	if(str[i] == "-c"||str[i] == "--count")//Vérifie nom de l'option

		vnb_lig =1;
  while(fgets(ligne, 512,fic) != NULL)//Indique lalignes où la chaine se trouve
    {
      if(strstr(ligne,str))
		{
		nb_ligne++;
		i++;
		}	
	}
	return (nb_ligne);
}

int ouverture_fichier(char *option, char *file, char *str)
{
	int i;
	int nb_ligne;
	int vnb_lig;
	FILE fic;

	i= 0 ;	
	nb_ligne = 0;
	vnb_lig=0;
	
	if(str[i] == "-f"||str[i] == "--file=%s", fic)//Vérifie nom de l'option
		fic = fopen(fic, "r");//Lit le nom du fichier
		return= 0;
	}
	else
	{
	return 1;
	}
}

int Affich_Version(char *option)
{
  int i;
  
  i = 0;
  
  if(str[i] == "-V"||str[i] == "--version")
	{
    printf("Version de our_grep : V1.0");
	return 0;
	}
	else
	{
	return 1;
	}
}
void grep_whithout_option(char *str,char *file)
{
  FILE *fic;
  char ligne[512];
  int i;
  int nb_lig;
	
  fic = fopen(file, "r");
  if(fic == NULL)
    {
      printf("bad file %s\n", file);
      exit(1);
    }
  i = 0;
  
  while(fgets(ligne, 512,fic) != NULL)
    {
      if(strstr(ligne,str))//Recherche de la chaine
	  {
			printf("%s ",ligne);
		//if aff_nom_fic = 1
			printf("%s", file);
		//if 	vnb_lig =1 
			printf(" %u ", nb_lig);
		    printf("Version de our_grep : V1.0");
			
			printf("\n");
			//exit(1);
      }
	  i++;
	  nb_lig =i+1;
    }
}

